<?php

//组合模式
//将对象组合成树形结构以表示"部分-整体"的层次解构，组合模式使用户对单个对象和组合对象的使用具有一致性。

//什么时候使用？
//需求中是体现部分与整体层次的结构时，以及希望用户可以忽略部分与整体的使用差异时。

//好处
//用户可以一致的使用组合结构和单个对象。

require_once '../autoload.php';

$company = new ConcreteCompany('中国总公司');
$hr_department = new HrDepartment('总公司人力资源部');
$finance_department = new FinanceDepartment('总公司财务部');
$company->add($hr_department);
$company->add($finance_department);

$hd_company = new ConcreteCompany('华东分公司');
$hd_company->add(new HrDepartment('华东人力资源部'));
$hd_company->add(new FinanceDepartment('华东财务部'));
$company->add($hd_company);

$hn_company = new ConcreteCompany('华南分公司');
$hn_company->add(new HrDepartment('华南人力资源部'));
$hn_company->add(new FinanceDepartment('华南财务部'));
$company->add($hn_company);

$zj_company = new ConcreteCompany('浙江分公司');
$zj_company->add(new HrDepartment('浙江人力资源部'));
$zj_company->add(new FinanceDepartment('浙江财务部'));
$hd_company->add($zj_company);

$company->display(1);

$company->lineOfDuty();